package com.zhaojun.cloud.support.shiro;


import com.zhaojun.cloud.service.api.RedisService;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.util.UUID;

/**
 *  内置默认是Map缓存 redis服务独立出去了就不好加data-redis的jar包 理念就颠覆了
 *  会先执行create 方法中会去进行一个缓存session
 *  覆盖 CRUD 等方法进行一个微服务Redis调用
 *  : 还有一个问题
 *         获取所有SESSION 的方式 是redis用Hash的方式储存 会方便,但是就不会自动过期
 *         如果session 用String的方式储存，自动过期是有了 但是获取所有的就比较麻烦了
 *         待优化！
 *    shiro 的做法我了解了下
 *          有个定时器线程池 30分钟会进行一次获取所有的session  判断时间是否过期 过期删除
 *
 */
@Component
public class RedisShiroSessionDao extends EnterpriseCacheSessionDAO {

    private final String sessionprefix = "zhaojun:";

    @Override
    protected Serializable doCreate(Session session) {
        super.assignSessionId(session, sessionprefix + UUID.randomUUID().toString().replace("-",""));
        return session.getId();
    }

}
